package com.Twenty_Two;

import java.util.HashMap;
import java.util.Map;

/**
 * 1640. 能否连接形成数组
 * 给你一个整数数组 arr ，数组中的每个整数 互不相同 。另有一个由整数数组构成的数组 pieces，其中的整数也 互不相同 。请你以 任意顺序 连接 pieces 中的数组以形成 arr 。但是，不允许 对每个数组 pieces[i] 中的整数重新排序。
 *
 * 如果可以连接 pieces 中的数组形成 arr ，返回 true ；否则，返回 false 。
 *
 *  
 *
 * 示例 1：
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/check-array-formation-through-concatenation
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 *
 *
 * 2022/09/22 18:59
 */

public class Solution1640 {

    public static boolean canFormArray(int[] arr, int[][] pieces) {
        Map<Integer,int[]> map=new HashMap<>();
        for (int[] piece:pieces)
        {
            map.put(piece[0],piece);
        }
        for (int i=0;i<arr.length;)
        {
            if (!map.containsKey(arr[i]))
            {
                return false;
            }
            int[] array=map.get(arr[i]);
            for (int j=0;j<array.length;j++,i++)
            {
                if (arr[i]!=array[j])
                {
                    return false;
                }
            }
        }
        return true;
    }

    public static void main(String[] args) {
        int[] arr={91,4,64,78};
        int[][] pieces={{78},{4,64},{91}};
        System.out.println(canFormArray(arr,pieces));
    }
}
